Text Field Dialog topic
Text Field Dialog
Text field dialog package is useful when we need to have a text field, which appears in a bottom dialog. There are possible customizations such as passing a custom header, label, save button text, text field validation service,input text field maximum lines, custom edit icon and others.
Widgets
Within the text_field_dialog package you can create a TextFieldDialog widget in order
to show a text field dialog.
TextFieldDialog
The TextFieldDialog is a widget for displaying a text field modal sheet with some
pre-configured options.
label is the value of the text label of the widget, which when pressed loads the
text field dialog.
emptyLabel is the text value, displayed when there is no initially set text
value for the widget.
validator received a service, which extends TextFieldValidator and
implements its validation methods for the frontend and backend checks.
onChanged after the field service validation is successful the onChanged
function is called with the value from the text input field. It can be used
for sending the value as an event to a bloc, for example as:
onChanged: (street) => bloc.events.setStreet(street);
fillButtonText is the text value in the button in the dialog.
errorMapper function, which implementation should map the form error to
RxFieldException error and translate the error to the correct language.
You can check also the translateErrors() method in the TextFieldDialog widget
Set editFieldType to editFieldType.custom if you want to set custom edit icon
and provide the icon to editFieldCustomIcon.
value is the value bellow the label text value, which has been inputted
as text field value.
header is a value displayed above the text field in the dialog.
maxLines is the value of maximum lines the InputTextField widget
can have, if the number is increased, the input field becomes bigger.
editFieldType is used in the EditFieldWidget and from its type,
one of the preconfigured icons are loaded or if the type is set to
EditFieldType.custom, you can set a custom icon. In this case, you should
provide a custom icon to editFieldCustomIcon.
dialogHasBottomPadding by default is should be true, which moves the dialog
up with the height of the keyboard, when it is visible, so the dialog appears
above it.
isDismissible shows whether you can dismiss the dialog, if you click outside
of it.
heightFactor sets a custom heightFactor, setting, how high the modal sheet
is displayed.
optionalString a string which should be provided, when the LabeledBoxWidget's
type is set to optional: LabeledBoxType.optional and the value is null.
How to use
In order to start using this package you need to add the dependency to the widget_toolkit in
your pubspec.yaml file.
widget_toolkit: any
After that you can import the package with the following line:
import 'package:widget_toolkit/text_field_dialog.dart';
Additional step is the requirement to add the TextFieldDialogTheme as a extension to your ThemeData.
as an example:
//theme
//...
extensions: [
darkMode ? WidgetToolkitTheme.dark : WidgetToolkitTheme.light,
darkMode ? TextFieldDialogTheme.dark : TextFieldDialogTheme.light,
]
//..
Complete example for TextFieldDialog usage:
TextFieldDialog<String>(
optionalString: 'Optional',
errorMapper: (obj, context) =>
ErrorMapperUtil<String>().errorMapper(obj, context),
label: 'Label text',
value: 'Some value',
emptyLabel: 'Empty label',
editFieldCustomIcon: Assets.deliveryBlack,
editFieldType: hasCustomIcon
? EditFieldType.custom
: EditFieldType.editfield,
onChanged: (street) => bloc.events.setStreet(street),
validator: context.read<LocalAddressFieldService>(),
fillButtonText: 'Save',
dialogHasBottomPadding: false,
header: 'Header text',
maxLines: 3,
isDismissible: true,
heightFactor: 0.6,
),